//
//  SSStatusCellModel.swift
//  weibo
//
//  Created by 邵帅 on 16/6/27.
//  Copyright © 2016年 groupNineObject. All rights reserved.
//

import UIKit

class SSStatusCellModel: NSObject {

    var model: SSStatusModel?
    
    init(model: SSStatusModel) {
        self.model = model
    }
    
    var photoUrl: NSURL? {
        
        if let urlStrig = model?.user?.profile_image_url{
            // 赋值
            return NSURL(string: urlStrig)
            
        }
        return NSURL()
    }
    
    // 头像
    var iconName: String? {
        
        return model?.user?.profile_image_url
    }
    
    ///   昵称
    var name: String? {
        return model?.user?.screen_name
    }
    ///  内容
    var content: String?{
        return model?.text
    }
    ///等级图片
    var levelImage: UIImage? {
        
        if let level = model?.user?.mbrank {
            
            return UIImage(named: "common_icon_membership_level\(level)")
            
        }
        
        return UIImage()
    }
    /// 认证图片
    var verifyImage: UIImage? {
        
        if let type = model?.user?.verified_type {
            
            switch type {
                
            case -1: return UIImage()
            case 0: return UIImage(named: "avatar_grassroot")
            case 2,3,5: return UIImage(named: "avatar_enterprise_vip")
            case 220: return UIImage(named: "avatar_vip")
                
            default : return UIImage()
                
            }
            
        }
        
        return UIImage()
        
    }
    
    // 改变微博表情样式
    var attributeText: NSAttributedString? {
        
        return dealEmoticonText(model?.text)
    }
    
    var retweetAttributeText: NSAttributedString? {
        
        
        return dealEmoticonText(model?.retweet_status?.text)
    }
    
    
    ///  转发按钮的标题
    var retweetString: String? {
        
        if model?.reposts_count == 0 {
            return "转发"
        } else {
            return "\(model?.reposts_count ?? 0)"
        }
        
    }

    
    ///  评论按钮标题
    var commentString: String? {
        if model?.comments_count == 0 {
            return "评论"
        } else {
            return "\(model?.comments_count ?? 0)"
        }
    }
    ///  点赞按钮的标题
    var goodString: String? {
        
        if model?.attitudes_count == 0 {
            
            return "赞"
        } else {
            
            return  "\(model?.attitudes_count ?? 0)"
        }
        
    }
    
    // 转发微博的文字
    var retweetStatusString: String? {
        
        return model?.retweet_status?.text
        
    }
    
    
    /// 来源字符串
    var sourceString: String? {
        return dealSource(model?.source)
    }
    
    var createtimeString: String? {
        
        return dealCreateTime(model?.created_at)
    }
        
    ///  来源的数据处理 -- 等大家讲到实用技术的时候,会讲正则
    
    private func dealSource(source: String?) -> String?{
        
        // "<a href=\"http://app.weibo.com/t/feed/6vtZb0\" rel=\"nofollow\">微博 weibo.com</a>"
        // "<a href=\"http://app.weibo.com/t/feed/2cEJdS\" rel=\"nofollow\">IT之家</a>"
        
        /*
         "<a href=\"http://app.weibo.com/t/feed/2cEJdS\" rel=\"nofollow\"
         IT之家</a
         "
         
         
         IT之家
         /a
         */
        // 1. 根据字符来分割字符串,返回分割后的字符串数组
        let subSourceArray = source?.componentsSeparatedByString(">")
        // 2. 判断一下数组的个数,防止崩溃
        if subSourceArray?.count >= 2 {
            
            // 3. 拿到索引为 1 的那个字符串
            let lastArray = subSourceArray![1].componentsSeparatedByString("<")
            
            // 4. 判断一下数组的个数,防止崩溃
            if lastArray.count >= 1 {
                // 返回处理好的字符串
                return lastArray.first
            }
        }
        
        return ""
    }
    
    //MARK:-- 时间的处理
    private func dealCreateTime(createtime: String?) -> String {
        
        guard let createTime = createtime else {
            return ""
        }
        
        // Wed Jun 29 15:49:31 +0800 2016
        
        // 对日期的处理分 2 大步
        /*
         第一步: 需要把 Wed Jun 29 15:49:31 +0800 2016 转换成标准时间 2016-06-29 15:58:58 +0800
         第二步: 我们需要通过日历,来对时间进行比较,到达 发布 刚刚/多少分钟之前的效果
         */
        
        
        let formatter = NSDateFormatter()
        // 设置格式 -- 同学们不要记格式
        
        /*
         设置日期格式 （声明字符串里面每个数字和单词的含义）
         E：星期
         M: 月份
         d：日
         H: 24小时
         m: 分
         s: 秒
         y: 年
         */
        // 这个格式,是要转换字符串的格式
        // Wed Jun 29 15:49:31 +0800 2016
        formatter.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
        
        // 再设置时区
        formatter.locale = NSLocale(localeIdentifier: "en_US")
        
        // 转换时间
        let createDate = formatter.dateFromString(createTime)
        //        let createDate = formatter.dateFromString("Wed Jun 28 14:49:31 +0800 2016")
        
//        printLog(createDate)
        
        //MARK:-- 第二步
        // 1. 获取一个日历对象
        let calander = NSCalendar.currentCalendar()
        // 2.要比较的 Year.Month .Day 的选项
        let unit = NSCalendarUnit(arrayLiteral: .Year,.Month,.Day,.Hour,.Minute)
        // 3. 对时间进行比较
        let cmps = calander.components(unit, fromDate: createDate!, toDate: NSDate(), options: [])
        
        /*
         如果是今年
         
         是今天
         
         1分钟之内 显示 "刚刚"
         
         1小时之内 显示 "xx分钟前"
         
         其他 显示 "xx小时前"
         
         是昨天 显示 "昨天 HH:mm"
         
         其他 显示 "MM-dd HH:mm"
         
         不是今年 显示 "yyyy-MM-dd"
         */
        // 判断是不是今年
        if cmps.year == 0 {
            
            // 判断是不是这个月
            // 2016-05-28
            // 2016-06-29
            if cmps.month == 0 { // 本月
                
                if cmps.day == 0 { // 今天
                    
                    if cmps.hour == 0 { // 1小时内
                        
                        if cmps.minute == 0 {
                            return "刚刚"
                        } else {
                            return "\(cmps.minute)分钟之前"
                        }
                        
                    } else { // 其他小时之内
                        
                        return "\(cmps.hour)小时之前"
                        
                    }
                    
                } else if cmps.day == 1 { // 昨天
                    // 需要对时间进行处理
                    
                    // 时间格式化
                    formatter.dateFormat = "HH:mm"
                    // 返回格式化后的字符串
                    let str = formatter.stringFromDate(createDate!)
                    return "昨天 \(str)"
                } else {
                    
                    // 设置时间格式
                    formatter.dateFormat = "MM-dd HH:mm"
                    
                    return formatter.stringFromDate(createDate!)
                    
                    
                }
                
            }
            
            
        } else { //
            
        }
        
        return ""
    }
    
    
    private func dealEmoticonText(text: String?)-> NSAttributedString? {
        
        guard let text = text else {
            return nil
        }

        
        let globleString = NSMutableAttributedString(string: text)
        
        // 正则查找格式
        let pattern = "\\[.*?\\]"
        
        do {
            
            // 创建正则
            let regs = try NSRegularExpression(pattern: pattern, options: NSRegularExpressionOptions.DotMatchesLineSeparators)
            
            // 查找
            let results = regs.matchesInString(text, options: [], range: NSMakeRange(0, text.characters.count))
            
            // 遍历结果
            for (_,result) in results.reverse().enumerate() {
                
                let range = result.range
                
                let emoticonString = (text as NSString).substringWithRange(range)
                
                let emoticon = SSEmoticonManager.returnEmoticon(emoticonString)
                
                // 附件
                let attachment = SSTextAttachment()
                attachment.emoticon = emoticon
                
                let attribute = attachment.getAttibuteString(UIFont.systemFontOfSize(16))
                
                guard let myAttribute = attribute else {
                    
                    return NSAttributedString()
                }
                
                globleString.replaceCharactersInRange(range, withAttributedString: myAttribute)
                
                
            }
            
            return globleString
            
            
        }catch {
            
            print(error)
        }
   
        return nil
    }

    
}
